home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / Issue28 / excel / EXCEL.ZIP / EXCELTOP.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-07-28  |  5.8 KB  |  231 lines

  1. {*******************************************************}
  2. {       TExcel Component Demo for Delphi 1.0 .. 3.0     }
  3. {                                                       }
  4. {       Copyright (c) 1996, 1997 Tibor F. Liska         }
  5. {       Tel/Fax:    00-36-1-165-2019                    }
  6. {       Office:     00-36-1-209-5284                    }
  7. {       E-mail: liska@sztaki.hu                         }
  8. {*******************************************************}
  9. unit ExcelTop;
  10.  
  11. interface
  12.  
  13. uses
  14.   Messages, SysUtils, Classes, Graphics, Controls, Forms,
  15.   Dialogs, StdCtrls, ExtCtrls, Spin, Buttons, Excels;
  16.  
  17. type
  18.   TForm1 = class(TForm)
  19.     Panel1: TPanel;
  20.     cmTable: TBitBtn;
  21.     CheckBox1: TCheckBox;
  22.     SpinEdit1: TSpinEdit;
  23.     SpinEdit2: TSpinEdit;
  24.     SpinEdit3: TSpinEdit;
  25.     Label1: TLabel;
  26.     Label2: TLabel;
  27.     Label3: TLabel;
  28.     Label4: TLabel;
  29.     LabelTime: TLabel;
  30.     LabelTotal: TLabel;
  31.     LabelTransfer: TLabel;
  32.     cmStop: TBitBtn;
  33.     Panel2: TPanel;
  34.     cmCommand: TBitBtn;
  35.     ComboBox1: TComboBox;
  36.     Label5: TLabel;
  37.     cmClose: TBitBtn;
  38.     Timer1: TTimer;
  39.     Panel3: TPanel;
  40.     cmRun: TBitBtn;
  41.     Label7: TLabel;
  42.     ComboBox3: TComboBox;
  43.     Panel4: TPanel;
  44.     cmRequest: TBitBtn;
  45.     Label6: TLabel;
  46.     ComboBox2: TComboBox;
  47.     Panel5: TPanel;
  48.     cmGetCell: TBitBtn;
  49.     Label9: TLabel;
  50.     Label8: TLabel;
  51.     SpinEdit4: TSpinEdit;
  52.     SpinEdit5: TSpinEdit;
  53.     GroupBox1: TGroupBox;
  54.     Memo: TMemo;
  55.     procedure FormCreate(Sender: TObject);
  56.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  57.     procedure Timer1Timer(Sender: TObject);
  58.     procedure ExcelOpen (Sender: TObject);
  59.     procedure ExcelClose(Sender: TObject);
  60.     procedure cmCloseClick(Sender: TObject);
  61.     procedure cmTableClick(Sender: TObject);
  62.     procedure cmCommandClick(Sender: TObject);
  63.     procedure cmRequestClick(Sender: TObject);
  64.     procedure cmRunClick(Sender: TObject);
  65.     procedure ComboBox2Change(Sender: TObject);
  66.     procedure cmStopClick(Sender: TObject);
  67.     procedure cmGetCellClick(Sender: TObject);
  68.   private
  69.       Stop : Boolean;
  70.   public
  71. {$IFNDEF INSTALLED}
  72.      Excel : TExcel;
  73. {$ENDIF}
  74.   end;
  75.  
  76. var
  77.   Form1: TForm1;
  78.  
  79. implementation
  80.  
  81. {$R *.DFM}
  82.  
  83. procedure TForm1.FormCreate(Sender: TObject);
  84. begin
  85. {$IFNDEF INSTALLED}
  86.   Excel := TExcel.Create(Self);
  87. {$ENDIF}
  88.   ComboBox1.ItemIndex := 0;
  89.   ComboBox2.ItemIndex := 0;
  90.   ComboBox3.ItemIndex := 0;
  91.   SpinEdit3.Value := Excel.WaitAfter;
  92.   Timer1.Enabled := True;          { Delayed Connect }
  93. end;
  94.  
  95. procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
  96. begin
  97.   if Excel.Connected then Excel.CloseMacroFile;
  98.   Excel.OnClose := nil;
  99. end;
  100.  
  101. procedure TForm1.Timer1Timer(Sender: TObject);
  102. begin
  103.   Screen.Cursor := crHourGlass;
  104. try
  105.   Timer1.Enabled := False;
  106.   Excel.OnOpen  := ExcelOpen;
  107.   Excel.OnClose := ExcelClose;
  108.   Excel.Connect;   { Same as Excel.Connected := True; }
  109. finally
  110.   Screen.Cursor := crDefault;
  111. end; end;
  112.  
  113. procedure TForm1.ExcelOpen(Sender: TObject);
  114.   var
  115.       MacroFile : TFileName;
  116. begin
  117.   cmTable  .Enabled := True;
  118.   cmCommand.Enabled := True;
  119.   MacroFile := ExtractFilePath(ParamStr(0))+'TExcel.xls';
  120.   if FileExists(Macrofile) then
  121.     begin
  122.       Excel.OpenMacroFile(MacroFile, True);
  123.       cmRun.Enabled := True;
  124.     end
  125.     else
  126.       cmRun.Enabled := False;
  127.   cmRequest.Enabled := True;
  128.   cmGetCell.Enabled := True;
  129. end;
  130.  
  131. procedure TForm1.ExcelClose(Sender: TObject);
  132. begin
  133.   cmTable  .Enabled := False;
  134.   cmCommand.Enabled := False;
  135.   cmRun    .Enabled := False;
  136.   cmRequest.Enabled := False;
  137.   cmGetCell.Enabled := False;
  138.   ShowMessage('Excel closed');
  139. end;
  140.  
  141. procedure TForm1.cmCloseClick(Sender: TObject);
  142. begin
  143.   Close;
  144. end;
  145.  
  146. procedure TForm1.cmTableClick(Sender: TObject);
  147.   var
  148.       i, j, n, Rows, Cols : Longint;
  149.       t0 : TDateTime;
  150.       NewTable : Boolean;
  151. begin
  152.   Rows := SpinEdit1.Value;
  153.   Cols := SpinEdit2.Value;
  154.   Excel.WaitAfter := SpinEdit3.Value;
  155.   NewTable := CheckBox1.State = cbChecked;
  156.   Excel.Wait;
  157.   if not NewTable and (Excel.Selection = msgNoReply) then
  158.     raise Exception.Create(msgNoTable);
  159.   Stop := False;
  160.   cmStop.BringToFront;
  161.   cmStop.Visible := True;
  162.   cmStop.SetFocus;
  163.   LabelTotal.Caption := 'of ' + IntToStr(Rows * Cols) + ' transfers';
  164.   t0 := Time;                                { Start time }
  165. try
  166.   Excel.StartTable(NewTable);
  167.   n := 0;
  168.   for i:=1 to Rows do
  169.     for j:=1 to Cols do
  170.     begin
  171.       LabelTime.Caption := TimeToStr(Time - t0);
  172.       n := n + 1;
  173.       LabelTransfer.Caption := IntToStr(n);
  174.       Excel.PutInt(i, j, i*100000+j);
  175.       if Stop then
  176.         raise Exception.Create('Progress cancelled');
  177.     end;
  178. finally
  179.   LabelTime.Caption := TimeToStr(Time - t0); { End time }
  180.   cmStop.Visible := False;
  181.   Excel.EndTable;                            { Show table }
  182. end; end;
  183.  
  184. procedure TForm1.cmCommandClick(Sender: TObject);
  185. begin
  186.   Excel.Exec(ComboBox1.Text);
  187. end;
  188.  
  189. procedure TForm1.cmRequestClick(Sender: TObject);
  190.   var
  191.       i : Integer;
  192.       Reply : string;
  193. begin
  194.   Memo.Lines.Clear;
  195.   Reply := Excel.Request(ComboBox2.Text);
  196.   i := Pos(#9, Reply);
  197.   while i > 0 do
  198.   begin
  199.     Memo.Lines.Add(Copy(Reply, 1, i-1));
  200.     Delete(Reply, 1, i);
  201.     i := Pos(#9, Reply);
  202.   end;
  203.   Memo.Lines.Add(Reply);
  204. end;
  205.  
  206. procedure TForm1.cmGetCellClick(Sender: TObject);
  207. begin
  208.   Screen.Cursor := crHourGlass;
  209. try
  210.   Memo.Lines.Clear;
  211.   Memo.Lines.Add(Excel.GetCell(SpinEdit4.Value, SpinEdit5.Value));
  212. finally
  213.   Screen.Cursor := crDefault;
  214. end; end;
  215.  
  216. procedure TForm1.cmRunClick(Sender: TObject);
  217. begin
  218.   Excel.Run(ComboBox3.Text);
  219. end;
  220.  
  221. procedure TForm1.ComboBox2Change(Sender: TObject);
  222. begin
  223.   Memo.Lines.Clear;
  224. end;
  225.  
  226. procedure TForm1.cmStopClick(Sender: TObject);
  227. begin
  228.   Stop := True;
  229. end;
  230.  
  231. end.